#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
#import ctypes
import os
import commands
import ConfigParser
import motion_lib
#CONFIG='/etc/osiriseye.cfg'
CONFIG='./osiriseye.cfg'

class MotionFactory:


	def __init__(self):
		#Libreria que guarda durante toda su existencia una tabla con las camaras creadas
		#Si quieres modificar solo un parametro escribes el nombre de la camara y el paramatro a modificar
		self.am = motion_lib 
	
	def newCamera(self,name,fr,rows,cols,color_BN,directori,gap,fr_pre_capture,threshold ,start_event_script,end_event_script,pid,port,alias):
		self.am.AM_Set_NewCam(name,fr,rows,cols,color_BN,directori,gap,fr_pre_capture,threshold ,start_event_script,end_event_script,pid,port,alias)   

	# dona el numero de cameres del sistema
	def Consulta_Num_Cams(self):
		return self.am.AM_Get_NumCams()

	#
	#TODO: Podriamos tener una llamada del tipo self.am.AM_Modifica_Tot(name,<llista de tots els parametres>)
	#	      Tambien puede hacerse desde aqui juntando todos en uno.
	
	def Modificar_Tot(self,name,fr,rows,cols,color_BN,directori,gap,fr_pre_capture,threshold ,start_event_script,end_event_script,pid,port,alias,duration):
		print "Modificant tot..."
		self.am.AM_Set_FrameRate(name,fr)
		self.am.AM_Set_Rows(name, rows)
		self.am.AM_Set_Cols(name, cols)
		self.am.AM_Set_Color_BN(name, color_BN) 
		self.am.AM_Set_Directory(name, directori)
		self.am.AM_Set_GapMotion(name,gap)
		self.am.AM_Set_Frame_precapture(name,fr_pre_capture)
		if threshold == 0.0: self.am.AM_Set_Threshold(name, threshold)
		else: self.am.AM_Set_Threshold(name, int(threshold*(1/(rows*cols))))
		self.am.AM_Set_start_event_script(name, start_event_script)
		self.am.AM_Set_end_event_script(name, start_event_script)
		self.am.AM_Set_Modificar_Alies(name, alias)
		self.am.AM_Set_Modificar_PID(name,pid)
		self.am.AM_Set_Modificar_port(name, port)
		self.am.AM_Set_Max_Video_Duration(name, duration)
		print "Tot modificat!"
		return True

	# modifica el valor del fr rate rang [2..100], 100 mean no SW limit, limited then by HW
	def Modificar_FrameRate(self,name,fr):
		return self.am.AM_Set_FrameRate(name,fr)
		#Eliminadas lineas de codigo que escribí, que servian para que si estaba gravando no permitiera modificaciones!
		#Pero ahora ya no dispongo de ese atributo desde aqui
			
	# modifica el nombre de files [1..255]
	def Modificar_Num_Rows(self,name,rows):
		return self.am.AM_Set_Rows(name, rows)

		'''	
		Lo mismo para todos estos..
		
		self.am.AM_Set_Cols(self.name, self.cols)

		# tipus == 1 :: Color, tipus == 0:: Blanc i negre
		self.am.AM_Set_Color_BN(self.name, self.Color_BN) 

		self.am.AM_Set_Directory(self.name, self.directori)

		self.am.AM_Set_GapMotion(self.name,self.gap)

		self.am.AM_Set_Frame_precapture(self.name,self.fr_pre_capture)


		if self.threshold == 0.0: self.am.AM_Set_Threshold(self.name, self.threshold)
		else: self.am.AM_Set_Threshold(self.name, int(self.threshold*(1/(self.rows*self.cols))))


		self.am.AM_Set_start_event_script(self.name, self.start_event_script)


		self.am.AM_Set_end_event_script(self.name, self.start_event_script)

		self.am.AM_Set_Modificar_Alies(self.name, self.alias)

		self.am.AM_Set_Modificar_PID(self.name,self.pid)

		self.am.AM_Set_Modificar_port(self.name, self.port)

		self.am.AM_Set_Max_Video_Duration(self.name, self.duration)
		'''
	

	
	# genera fitxer de configuracio del motion
	# name ==> device
	def Generar_MotionFile(self, name,path):
		self.am.AM_Create_MotionFile(path,name)

	def Reconfigurar_Motion(self,pid):
		print "kill ", pid
		os.system('kill -s HUP ' + str(pid))
		print pid, " killed"

	# Per defecte la gravacio continua esta OFF
	def Inici_Gravacio_continua(self,name):
		self.am.AM_Inici_Gravacio_continua(name)

	def Fi_Gravacio_continua(self,name):
		self.am.AM_Fi_Gravacio_continua(name)

	# Per defecte la deteccio del moviment esta ON
	def Activar_Deteccio(self,name):
		self.am.AM_Activar_Deteccio(name)

	def Desactivar_Deteccio(self,name):
		self.am.AM_Desactivar_Deteccio(name)
		